package com.sjc.designpattern.singleton;

import java.util.concurrent.atomic.AtomicLong;

/**
 * @Classname InnerClassFullSingletonPatternDemo
 * @Description 开发中最常用的 使用内部类实现的 单例模式
 * @Date 2020/4/25 11:05
 * @Created by SangJiacun
 */
public class InnerClassFullSingletonPatternDemo {
    private AtomicLong id = new AtomicLong();
    private InnerClassFullSingletonPatternDemo(){}

    /**
     * 可以做饱汉模式
     * 内部类，只要没有被使用，就不会初始化，Singleton的实例就不会创建。
     * 在第一次有人调用getInstance方法的时候，内部类会初始化，创建一个Singleton的实例。
     * java能确保，类静态初始化的过程一定只会执行一次。
     */
    public static class Singleton {
        private static final InnerClassFullSingletonPatternDemo instance = new InnerClassFullSingletonPatternDemo();
    }

    public static InnerClassFullSingletonPatternDemo getInstance(){
        return Singleton.instance;
    }

}
